package main

import (
	"fmt"
	"math/rand"
	"time"
)

// 九九乘法表
func multiTable() {
	for i := 1; i < 10; i++ {
		for j := 1; j < i+1; j++ {
			if j == 1 {
				fmt.Printf("%d*%d=%d ", j, i, j*i) // 第一列，第三个数字j*i的宽度为1
			} else {
				fmt.Printf("%d*%d=%-2d ", j, i, j*i) // 第二列之后，第三个数字j*i的宽度为2，左对齐
			}

		}
		fmt.Println()
	}
}

// 生成随机数，单数求和，偶数求积
func randomSumMulti(n int) (sum, multi int) {
	multi = 1
	src := rand.NewSource(time.Now().UnixNano())
	gen := rand.New(src)
	for i := 0; i < 20; i++ {
		d := gen.Intn(n)
		if d == 0 { // 排除0
			i--
			continue
		}
		fmt.Printf("%d ", d)
		if d&1 != 0 {
			sum += d // 奇数累加
		} else {
			multi *= d // 偶数累积
		}
	}
	return sum, multi
}

// 斐波那契数列
func fibonacci(n int) {
	a, b := 0, 1
	for a < n {
		fmt.Printf("%d ", a)
		a, b = b, a+b
	}
}

func main() {
	// 九九乘法表
	fmt.Println("九九乘法表: ")
	multiTable()
	fmt.Println()

	// 随机数
	fmt.Print("生成随机数: ")
	s, m := randomSumMulti(20)
	fmt.Printf("奇数累加求和：%d, 偶数累乘求积：%d\n", s, m)
	fmt.Println()

	// 斐波那契数列
	fmt.Println("斐波那契数列: ")
	fibonacci(100)
}


// 批改意见
// 1. 随机数中，尽量不要在循环中修改i的值，可能会造成意想不到的错误；
// 2. 奇偶的判断有问题，i=1时，1&1=1，此时是偶数个，i=2时，2&1=0，此时是奇数个
// 3. 斐波那契数列从1开始